/*******************************************************************************
* Copyright (c) 2009 EclipseSource Inc. and others. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v1.0
* which accompanies this distribution. The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License
* is available at http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* EclipseSource Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.examples.toast.backend.rap;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.examples.toast.backend.data.IVehicle;
import org.eclipse.examples.toast.backend.provisioning.IProvisioner;
import org.eclipse.examples.toast.internal.backend.rap.bundle.Component;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.ISelectionService;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.part.ViewPart;
public class SoftwareView extends ViewPart {
public static final String ID = "org.eclipse.examples.toast.backend.rap.softwareView";
private IVehicle vehicle = null;
private ListViewer viewer;
// private IProvisioner provisioner;
public void createPartControl(final Composite parent) {
GridLayout parentLayout = LayoutUtil.createGridLayout(3, false, 10, 10);
parent.setLayout(parentLayout);
viewer = new ListViewer(parent, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
viewer.setLabelProvider(new LabelProvider() {
public String getText(Object element) {
return (((IInstallableUnit) element).getProperty(IInstallableUnit.PROP_NAME));
}
});
viewer.setContentProvider(new ArrayContentProvider());
Composite comp = new Composite(parent, SWT.NONE);
RowLayout layout = new RowLayout(SWT.VERTICAL);
layout.fill = true;
comp.setLayout(layout);
Button addButton = new Button(comp, SWT.PUSH);
addButton.setText("Add");
addButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
final ProvisioningDialog dialog = new ProvisioningDialog(parent.getShell());
Collection ius = getAvailablePackages(vehicle);
dialog.setInput(new ArrayList(ius));
dialog.open();
List selectedPackages = dialog.getSelectedPackages();
if (selectedPackages != null && !selectedPackages.isEmpty()) {
IProvisioner provisioner = Component.getProvisioner();
IInstallableUnit iu = (IInstallableUnit) selectedPackages.get(0);
provisioner.install(vehicle.getName(), iu.getId(), null);
Component.getTickler().tickle(vehicle.getName());
}
viewer.setInput(getInstalledPackages(vehicle));
}
});
Button removeButton = new Button(comp, SWT.PUSH);
removeButton.setText("Remove");
removeButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
IProvisioner provisioner = Component.getProvisioner();
IInstallableUnit iu = (IInstallableUnit) selection.getFirstElement();
provisioner.uninstall(vehicle.getName(), iu.getId(), null);
Component.getTickler().tickle(vehicle.getName());
viewer.setInput(getInstalledPackages(vehicle));
}
});
Button confButton = new Button(comp, SWT.PUSH);
confButton.setText("Configure");
createSelectionListener();
}
public void setFocus() {
viewer.getControl().setFocus();
}
private Collection getAvailablePackages(IVehicle vehicle) {
IProvisioner provisioner = Component.getProvisioner();
if (provisioner == null)
return new ArrayList();
return provisioner.getAvailableFeatures(vehicle.getName());
}
private Collection getInstalledPackages(IVehicle vehicle) {
IProvisioner provisioner = Component.getProvisioner();
if (provisioner == null)
return new ArrayList();
return provisioner.getInstalled(vehicle.getName());
}
private void createSelectionListener() {
IWorkbenchWindow window = getSite().getWorkbenchWindow();
ISelectionService selectionService = window.getSelectionService();
selectionService.addSelectionListener(new ISelectionListener() {
public void selectionChanged(final IWorkbenchPart part, final ISelection selection) {
if (selection != null) {
IStructuredSelection sselection = (IStructuredSelection) selection;
IVehicle vehicle = (IVehicle) sselection.getFirstElement();
if (vehicle != null) {
System.out.println("vehicle " + vehicle);
SoftwareView.this.vehicle = vehicle;
viewer.setInput(getInstalledPackages(vehicle));
}
}
}
});
}
}